package main

import "fmt"

//常量
//定义常量之后，不能修改它的值
// const pi = 3.14
const (
	//批量声明变量时，如果某一行声明后没有赋值，默认和上一行的值一样
	STATUSOK = 200
	NOFOUND  = 404
	notfound
)

//iota 是go语言中的常量计数器，只能在常量的表达式中用,在const关键字出现时将被重置为0
//const中每新增一行常量声明将使iota计数一次，即可以理解为iota为const语句块中的行索引，在定义枚举时很有用
const (
	a1 = iota //0，从0开始，每当有const增加时，iota增加1
	a2
	a3
)

// 声明中间插队
const (
	n1 = iota //0
	n2 = 100  //100
	n3 = iota //2
	n4        //3
)

//定义数量级(定义数量级 （这里的<<表示左移操作，1<<10表示将1的二进制表示向左移10位，也就是由1变成了10000000000，也就是十进制的1024。同理2<<2表示将2的二进制表示向左移2位，也就是由10变成了1000，也就是十进制的8。）)
const (
	_  = iota
	KB = 1 << (10 * iota)
	MB = 1 << (10 * iota)
	GB = 1 << (10 * iota)
)

//iota定义在一行
const (
	a, b = iota + 1, iota + 2 //1,2
	c, d                      //2,3
	e, f                      //3,4
)

func main() {
	// CONST
	fmt.Println(STATUSOK)
	fmt.Println(NOFOUND)
	fmt.Println(notfound)
	//IOTA
	fmt.Println(a1)
	fmt.Println(a2)
	fmt.Println(a3)
	//声明中间插队
	fmt.Println(n1)
	fmt.Println(n2)
	fmt.Println(n3)
	//声明数量级
	fmt.Println(KB)
	fmt.Println(MB)
	fmt.Println(GB)
	//iota声明在一行
	fmt.Println(a, b)
	fmt.Println(c, d)
	fmt.Println(e, f)
}
